package com.ucarbon.ucarbon.utils;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import com.ucarbon.ucarbon.entity.CountryLandstype;
import com.ucarbon.ucarbon.entity.CountryNpp;
import com.ucarbon.ucarbon.entity.YearNpp;
import com.ucarbon.ucarbon.entity.options.BarOptions;
import com.ucarbon.ucarbon.entity.options.PieOptions;
import com.ucarbon.ucarbon.entity.options.PlotOptions;

/**
 * <p>
 * Echarts图表的配置项生成
 * </p>
 * 
 * @author XuGaoran
 * @since 1.0.0
 */
public class EchartsOptionsGnerator {
    /**
     * 生成Bar类型图表的Options
     * 
     * @param year 传入需要查询的年份
     * @param data 传入查询数据库的结果
     * @return 返回Bar的配置类
     * @throws Exception 抛出异常
     */
    public static BarOptions generateBarOptions(Integer year, List<CountryNpp> data) throws Exception {
        return new BarOptions(
                year.toString() + "年不同区域柱状图",
                Arrays.asList(0., 0.001),
                data.stream().map(CountryNpp::getCounName).collect(Collectors.toList()),
                Objects.toString(year),
                data.stream().map(CountryNpp::getNpp).collect(Collectors.toList()));
    }

    /**
     * 生成Plot类型图表的Options
     * 
     * @param country 传入需要查询的城市
     * @param data    传入查询数据库的结果
     * @return 封装好Plot配置项
     * @throws Exception 抛出异常
     */
    public static PlotOptions generatePlotOptions(String country, List<YearNpp> data) throws Exception {
        return new PlotOptions(
                country + "年不同区域柱状图",
                false,
                country,
                data.stream().map(YearNpp::getYearNum).collect(Collectors.toList()),
                data.stream().map(YearNpp::getNpp).collect(Collectors.toList()));
    }

    /**
     * 生成Pie类型图表的Options
     * 
     * @param country 传入需要查询的城市
     * @param data    传入查询数据库的结果
     * @return 封装好Plot配置项
     * @throws Exception 抛出异常
     */
    public static PieOptions generatePieOptions(String country, Integer year, List<CountryLandstype> data)
            throws Exception {
        return new PieOptions(
                country + year.toString() + "年土地利用饼图",
                data.stream().map(CountryLandstype::getLsName).collect(Collectors.toList()),
                data.stream().map(CountryLandstype::getLsPrecent).collect(Collectors.toList()));
    }
}
